#include <QCoreApplication>
#include <QCommandLineParser>
#include <QCommandLineOption>
#include <QDebug>
#include <QDir>
#include <QFile>
#include <QJsonDocument>
#include <QJsonObject>
#include "Service/MarketService.h"
#include "LogManager.h"

using namespace Market;

int main(int argc, char *argv[]) {
    QCoreApplication app(argc, argv);
    QCoreApplication::setApplicationName("MarketService");
    QCoreApplication::setApplicationVersion("1.0");

    // 创建命令行解析器
    QCommandLineParser parser;
    parser.setApplicationDescription("Market Data Service");
    parser.addHelpOption();
    parser.addVersionOption();

    // 添加配置路径选项
    QCommandLineOption configPathOption(QStringList() << "c" << "config-path",
        "Path to configuration files directory",
        "path");
    parser.addOption(configPathOption);

    // 添加环境选项
    QCommandLineOption envOption(QStringList() << "e" << "env",
        "Environment (simnow/tts24)",
        "env");
    parser.addOption(envOption);

    // 解析命令行参数
    parser.process(app);

    // 获取配置路径和环境
    QString configPath = parser.value(configPathOption);
    QString env = parser.value(envOption).toLower();

    // 如果未指定配置路径，使用默认路径
    if (configPath.isEmpty()) {
        // 获取可执行文件所在目录
        QDir execDir(QCoreApplication::applicationDirPath());
        
        // 尝试找到项目根目录
        while (!execDir.exists("Config") && execDir.cdUp()) {
            // 继续向上查找，直到找到Config目录或到达根目录
        }
        
        if (!execDir.exists("Config")) {
            configPath = "/home/QTradeMaster/Config";
        } else {
            configPath = execDir.absolutePath() + "/Config";
        }

        // 只有在未指定配置路径时，才根据环境添加子目录
        if (!env.isEmpty()) {
            configPath = configPath + "/" + env;
        } else {
            // 如果未指定环境，检查当前工作目录名称
            QDir currentDir = QDir::current();
            QString dirName = currentDir.dirName().toLower();
            if (dirName == "simnow" || dirName == "tts24") {
                configPath = configPath + "/" + dirName;
            } else {
                // 默认使用simnow环境
                configPath = configPath + "/simnow";
            }
        }
    }

    // 确保配置目录存在
    QDir configDir(configPath);
    if (!configDir.exists()) {
        qCritical() << "Config directory does not exist:" << configPath;
        return -1;
    }

    // 初始化日志管理器
    QString logConfigFile = configPath + "/logger.json";
    if (!QFile::exists(logConfigFile)) {
        qCritical() << "Log config file does not exist:" << logConfigFile;
        return -1;
    }

    if (!LOG_MANAGER->init(logConfigFile.toStdString())) {
        qCritical() << "Failed to initialize log manager";
        return -1;
    }

    MLOG_INFO("main", "Using config path: {}", configPath.toStdString());

    try {
        // 创建并初始化市场服务
        MarketService service;
        if (!service.init(configPath)) {
            MLOG_ERROR("main", "Failed to initialize market service");
            return -1;
        }

        MLOG_INFO("main", "Market service initialized successfully");

        // 启动服务
        service.start();
        MLOG_INFO("main", "Market service started");

        // 设置信号处理
        QObject::connect(&app, &QCoreApplication::aboutToQuit, [&]() {
            MLOG_INFO("main", "Application is shutting down...");
            service.stop();
        });

        return app.exec();
    }
    catch (const std::exception& e) {
        MLOG_ERROR("main", "Exception: {}", e.what());
        return -1;
    }
}